package cloud.mist.sailonix.common;

/**
 * 响应状态码枚举
 * 
 * @author sailonix
 * @since 2024-01-01
 */
public enum ResultCode {

    // 成功状态码
    SUCCESS(200, "操作成功"),

    // 客户端错误状态码 4xx
    BAD_REQUEST(400, "请求参数错误"),
    UNAUTHORIZED(401, "未授权访问"),
    FORBIDDEN(403, "禁止访问"),
    NOT_FOUND(404, "资源不存在"),
    METHOD_NOT_ALLOWED(405, "请求方法不允许"),
    CONFLICT(409, "资源冲突"),
    VALIDATION_ERROR(422, "参数校验失败"),

    // 服务器错误状态码 5xx
    INTERNAL_SERVER_ERROR(500, "服务器内部错误"),
    BAD_GATEWAY(502, "网关错误"),
    SERVICE_UNAVAILABLE(503, "服务不可用"),

    // 业务错误状态码 1xxx
    USER_NOT_FOUND(1001, "用户不存在"),
    USER_ALREADY_EXISTS(1002, "用户已存在"),
    USERNAME_DUPLICATE(1003, "用户名已存在"),
    EMAIL_DUPLICATE(1004, "邮箱已存在"),
    PHONE_DUPLICATE(1005, "手机号已存在"),

    // 数据库错误状态码 2xxx
    DATABASE_ERROR(2001, "数据库操作失败"),
    DATA_INTEGRITY_VIOLATION(2002, "数据完整性约束违反"),
    DUPLICATE_KEY_ERROR(2003, "主键或唯一键冲突"),

    // 系统错误状态码 9xxx
    SYSTEM_BUSY(9001, "系统繁忙，请稍后重试"),
    SYSTEM_MAINTENANCE(9002, "系统维护中"),
    RATE_LIMIT_EXCEEDED(9003, "请求频率超限");

    /**
     * 状态码
     */
    private final Integer code;

    /**
     * 状态消息
     */
    private final String message;

    /**
     * 构造函数
     */
    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 获取状态码
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取状态消息
     */
    public String getMessage() {
        return message;
    }
}
